<template>
  <h1>我是App组件</h1>
  <h2>一个人的信息</h2>
  <h3>姓名:{{ name }}</h3>
  <h3>性别:{{ sex }}</h3>
  <h3>年龄:{{ age }}</h3>
  <button @click="sayHello">打招呼(vue3写法)</button>
  <br />
  <br />
  <button @click="sayHello2">打招呼(vue2写法)</button>
  <br />
  <br />
  <button @click="sayHello3">
    测试一下在vue2中的配置去读取vue3中的数据,方法
  </button>
  <br />
  <br />
  <button @click="sayHello4">
    测试一下在vue3的setup配置中去读取vue2中的数据,方法
  </button>
</template>

<script>
import { h } from 'vue'
export default {
  name: 'App',
  data() {
    return {
      sex: '男',
    }
  },
  methods: {
    sayHello2() {
      console.log('vue2写法的欢迎')
    },
    sayHello3() {
      console.log(this.name)
      console.log(this.sex)
      console.log(this.age)
      console.log(this.sayHello)
    },
  },

  // 此处只是测试一下setup,暂时不考虑响应式的问题
  // 尽量不要与vue2配置混用vue2的配置可以访问到vue3中setup中的属性方法
  // 但是在setup中无法访问到vue2的相关配置(data,method,computed)
  // 如果有重名setup优先
  // setup不能是一个async函数,因为返回值不再是return的对象,而是promise,
  // 模板看不到return对象中的属性
  setup() {
    // 数据
    let name = '王某'
    let age = 18

    // 方法
    function sayHello() {
      alert(`我叫${name},我今年${age},你好啊`)
    }

    function sayHello4() {
      console.log(name)
      console.log(age)
      console.log(sayHello)
      console.log(this.sex)
      console.log(this.sayHello2)
    }

    // 返回一个对象(常用)
    return {
      name,
      age,
      sayHello,
      sayHello4,
    }

    // 返回一个渲染函数
    // return () => h('h1', '你好')
  },
}
</script>
